python中在列表前面加星号(*)的作用 |
您所在的位置:网站首页 › python 字典转为list › python中在列表前面加星号(*)的作用 |
python 里面列表前面加星号, 例如 : *[1, 2, 3],这是什么用法? 1、先说作用: 作用是:将列表解开成几个独立的参数,传入函数。类似的运算符还有两个星号(**),是将字典解开成独立的元素作为形参。 例如:add(a,b)函数需要输入两个数,在主函数中list = [1, 2] c = add(*list),此处*list就表示的是将list中的两个数拆开之后分别输入,等价于c = add(list[0], list[1])。 这样做的目的是为了简化代码 2、再放代码: def add(a, b): return a + b data = [4, 3] print(add(*data)) print(add(data[0], data[1])) # 等价于 print add(4, 3) data = {'a': 4, 'b': 3} # 当将字典传入作为形参时。。。形参的名字和字典的键的名字要相同 print(add(**data)) # 这里可以两个*,但后续直接对字典操作则出错 # 等价于 print add(4, 3) a = [1, 2, 3] b = (1, 2, 3) c = {1: "a", 2: "b", 3: "c"} print(a, "====", *a) print(b, "====", *b) print(c, "====", *c) # 打印的是键,而不是值其中的几个注意点: 1、当将字典传入作为形参时。。。形参的名字和字典的键的名字要相同,如图,字典的键为a,b,所以形参的名字也是a,b 2、只有在作为实参输入时,**data是正确的。如果直接对一个字典做**dict,python会报错。 3、*dict得到的是键而不是值,如代码中的*c 3、对向量操作 不光是列表、元组、字典,由numpy生成的向量也可以拆分; 4、用途 了解过函数中*args和**kwargs的人应该知道,这两个形参都接收若干个参数,通常我们将其称为参数组; *args:接收若干个位置参数,转换成元组tuple形式 **kwargs:接收若干个关键字参数,转换成字典dict形式 ps:需要注意的是位置参数*args,一定要在关键字参数**kwargs前 例子: def output(*args): print(type(args)) for i in args: print(i) list = [1, 2, 3] output(list) output(*list) 输出: [1, 2, 3] 1 2 3不难发现,如果不加*,add函数将整个列表当做一个元素使用,也就是add(([1,2,4,5],))。而带有*号的参数,此时相当于add((1, 2, 4, 5)); 5、*号也可以作用于二维的列表 显然也是将列表进行拆分,结果是两个一维列表;如下代码所示 # 作用于二维列表 array = [[1, 2, 3], [4, 5, 6] ] print(array) print(*array) print(type(array)) print(type(*array)) 输出: [[1, 2, 3], [4, 5, 6]] [1, 2, 3] [4, 5, 6] print(type(*array)) TypeError: type() takes 1 or 3 arguments如图,print(type(*array))会报错,这是因为type的输入不是一个导致的,这也说明,*号运算符将二维列表拆成两个列表 这么一看,这个带*变量的作用,就仿佛是把列表解开一层似的,而python中有一个zip函数,功能与之相反。 zip是将一个或多个可迭代对象进行包装压缩,返回将结果是列表; 通俗的说:zip()压缩可迭代对象,*号解压可迭代对象; 最后需要注意的是: 可迭代对象才可以使用*号拆分; 带*号变量严格来说并不是一个变量,而更应该称为参数,它是不能赋值给其他变量的,但可以作为参数传递; |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |